﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Media;
using WPF = System.Windows.Input;

namespace WPFCABShell.$safeprojectname$.Services.Command
{
	/// <summary>
	/// Defines the functionality of a command within the shell.
	/// </summary>
	public interface ICommand : WPF.ICommand
	{
		/// <summary>
		/// Gets the ID of the command.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Registered commands can be assigned an ID. Unregistered commands are assigned a GUID as their ID.
		/// </para>
		/// </remarks>
		string Id
		{
			get;
		}

		/// <summary>
		/// Gets the category the command belongs to.
		/// </summary>
		/// <remarks>
		/// <para>
		/// Categorizing commands gives a grouping mechanism when viewing lists of commands in the UI.
		/// </para>
		/// </remarks>
		string Category
		{
			get;
		}

		/// <summary>
		/// Gets the name of the command.
		/// </summary>
		/// <remarks>
		/// <para>
		/// The name includes any underscores used to denote access keys.
		/// </para>
		/// </remarks>
		string Name
		{
			get;
		}

		/// <summary>
		/// Gets the text of the command.
		/// </summary>
		/// <remarks>
		/// <para>
		/// The text is the same as the name minus any underscores. It is useful for display purposes.
		/// </para>
		/// </remarks>
		string Text
		{
			get;
		}

		/// <summary>
		/// Gets any image associated with the command.
		/// </summary>
		ImageSource Image
		{
			get;
			set;
		}

		/// <summary>
		/// Gets a value indicating whether this command wraps neither a CAB nor a WPF command.
		/// </summary>
		bool IsNullCommand
		{
			get;
		}

		/// <summary>
		/// Occurs whenever this command is executed.
		/// </summary>
		event EventHandler<EventArgs> Executed;
	}
}
